typeof null为什么等于object
这是一个历史遗留问题,是一个不能修改的错误。在JavaScript
的第一个版本实现中 用32位存储一个值 ,包括一个3位的用于表示类型的标识和实际的值。类型标记存储在低位上,一共有5种:
000
:对象1
:整数010
:浮点数100
:字符串110
:布尔
也就是说,最低位如果是1,那么类型标记只有1位长;如果是0,那么类型标记有3位长,为4种类型提供两个额外的位。有两个值是特殊的:
undefined
(JSVAL_VOID)是整数−230 = 1073741824(整数范围之外的数字)。null
(JSVAL_NULL)是机器码空指针。或者:一个对象类型标签加上一个零的引用(0000)。
现在我们很清楚为什么typeof
为什么会认为null
是一个对象了,它检查了null
的类型标记,类型标记说object
。